延續昨天字串雞屁股(昨天的留言XD)的內容,昨天主要說明單引號與雙引號的字串,今天會說明加上倒引號的字串意義,以及字串的**運算**與存取字符方式。
※加上倒引號的字串
'字串' 、 "字串" 、 字串
今天要來講第三種,在字串前後加上倒引號 ` (通常在鍵盤的ESC下方那個按鍵),是用於命令的執行,節錄書中一段(p.55):
『當文字被倒引號( )括住時,該文字會被視為一個夾上雙引號( " )的字串實字。該實字會被傳遞給一個名為<span style="color:rgb(255, 255, 255)"><span style="background-color:rgb(0, 0, 0)"> Kernel.
的方法。此方法會將該文字當成作業系統的一個shell命令來執行,並且將命令的輸出當成一個字串傳回。』
例如:我們在終端機中,如欲看資料夾下的檔案,在Unix系統我們會打『 ls 』,在Windows系統我們會打『 dir 』。這些效果等同於用Ruby寫『 ls
』或『 dir
』,請看下圖:
請看三個紅色框框的部分,原本終端機上我直接打ls,可以列出資料夾下的檔案,而當我進入irb(interactive Ruby[註1])模式時,我打ls
,執行結果一樣將該目錄底下的資料夾列出來,並且是以字串的模式顯示。另外,如同單引號與雙引號有相對應的『%q』與『%Q』(詳情請看昨天的文章),倒引號也有相對應的『%x』可使用,效果完全相同。
[註1] irb(interactive Ruby)是一種Ruby shell,有安裝Ruby就可以直接在自己終端機進入irb模式,並鍵入任何Ruby的運算式。
※字串的運算
先來認識兩個字串的運算符:『 + 』、『 << 』,直接看例子比較好懂:
"國父" + " " + "孫中山先生"
執行結果=> "國父 孫中山先生"
"國父" << " " << "孫中山先生"
執行結果=> "國父 孫中山先生"
看起來兩個運算符的結果一模一樣,都是把字串接在一起了,但有一個很大的差異是:
『 + 』在接完字串之後,會回傳一個新的字串物件!
『 << 』是直接更改最左邊的字串,而不會回傳一個新的物件!
接著再看**『 * 』**運算符:
"我愛Ruby" * 3
執行結果=> "我愛Ruby我愛Ruby我愛Ruby"
3 * "我愛Ruby"
TypeError: String can't be coerced into Fixnum
可以知道字串可以乘三遍,但顛倒過來就會報錯!
數字可以比大小:
3>2
=> true
-3>-2
=> false
字串也可以比大小!
"R">"U"
=> false
"B">"Y"
=> false
"Ruby">"RUBY"
=> true
這怎麼回事XD?書中提到這其實是跟ASCII編碼有關,所有大寫字母的編碼都比小寫字母小,在前面的連結中,我們可以看到,R的編碼為52,U的編碼為55,所以"R">"U"是錯的,依此類推。
※存取字符與子字符
『String所支援的運算符中最重要的或許是方括號陣列索引運算符 [] ,此運算符可用於提取或修改字串中的特定部分。』
a = "我愛Ruby!"
a[0] #=> "我" 第一個字
a[1] #=> "愛"
a[2] #=> "R"
a[-1] #=> "!" 倒數第一個字
a[-2] #=> "y"
a[-7] #=> "我"
a[-8] #=> nil 找不到這個字
a[2,4] #=> "Ruby" 第2+1個字,往右數總共要4個字
a[2,4] = "Python" #取代為Python XD
a => "我愛Python!"
所有字串開頭都是第0個數,往右正著數,往左負著數,如果超出範圍字串長度就會找不到這個字,取代的方法可以參考上面程式碼最後三行。
=================================================
今天是Lucky 7 day!今天發現這句很發人深省!
“We cannot teach people anything. We can only help them discover it within themselves.” Galileo Galilei
我的鐵人賽的文章可能完全不能當作教學文章,但希望可以給有興趣碰Ruby的朋友一點方向,快加入Ruby的行列吧XD!